/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ufc.quixada.comandos;

import br.com.ufc.quixada.entidades.Clientes;
import br.com.ufc.quixada.interfaces.Comando;
import br.com.ufc.quixada.service.ClienteService;
import br.com.ufc.quixada.util.SendMail;
import br.com.ufc.quixada.util.UtilLocExpress;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Administrator
 */
public class CmdCadastrarCliente implements Comando {

    @Override
    public String executa(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession(true);
        String RESULTADO = (String) session.getAttribute("RESULTADO");

        String nome = request.getParameter("nome");
        String cpf = request.getParameter("cpf");
        String rg = request.getParameter("rg");
        String email = request.getParameter("email");
        String senha = request.getParameter("senha");
        String telefone = request.getParameter("telefone");
        String endereco = request.getParameter("endereco");
        String nascimento = request.getParameter("nascimento");
        String validacao = UtilLocExpress.createRandomString(8);

        

        if (nome == null || nome.trim().isEmpty() || cpf == null || cpf.isEmpty() || rg == null || rg.isEmpty()
                || email == null || email.trim().isEmpty() || senha == null || senha.trim().isEmpty()
                || telefone == null || telefone.isEmpty() || endereco == null || endereco.isEmpty()
                || nascimento == null || nascimento.trim().isEmpty()) {
            session.setAttribute("erro", "Preencha todos os campos.");
            return "/cadastro.jsp";
        }

        System.out.println("CPF é: "+cpf);
        System.out.println("Data é: "+nascimento);

        if (cpf.length()!=14) {
            session.setAttribute("erro", "CPF invalido!!");
            return "/cadastro.jsp";
        }

        System.out.println("CPF é: "+cpf);
        System.out.println("Data é: "+nascimento);

        if(!UtilLocExpress.validaData(nascimento)){
            session.setAttribute("erro", "Data invalido!!");
            return "/cadastro.jsp";
        }

        System.out.println("CPF é: "+cpf);
        System.out.println("Data é: "+nascimento);

        cpf = cpf.substring(0, 3) + cpf.substring(4, 7) + cpf.substring(8, 11) + cpf.substring(12);

        System.out.println("CPF é: "+cpf);
        System.out.println("Data é: "+nascimento);

        if (!UtilLocExpress.valida_CpfCnpj(cpf)) {
            session.setAttribute("erro", "CPF invalido!!");
            return "/cadastro.jsp";
        }

        System.out.println("CPF é: "+cpf);
        System.out.println("Data é: "+nascimento);

        if(!UtilLocExpress.validEmail(email)){
            session.setAttribute("erro", "Email invalido!!");
            return "/cadastro.jsp";
        }

        System.out.println("CPF é: "+cpf);
        System.out.println("Data é: "+nascimento);

        Clientes cliente = new Clientes();
        ClienteService clis = null;

        try {
            clis = new ClienteService();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(CmdCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
/*
        cliente = clis.clientefindByCPF(cpf);
        //Verifica se o cpf já é cadastrado!!
        if (cliente != null && cliente.getCpf().equals(cpf)) {
            session.setAttribute("erro", "CPF já Cadastrado!!");
            return "/cadastro.jsp";
        }
/*
        cliente = new Clientes();
        cliente = clis.clientefindByEmail(email);
        //Verifica se o email já é cadastrado!!
        if (cliente != null && cliente.getEmail().equals(email)) {
            session.setAttribute("erro", "Email já Cadastrado!!");
            return "/cadastro.jsp";
        }
*/
        cliente = new Clientes();
        cliente.setNome(nome);
        cliente.setCpf(cpf);
        cliente.setRg(rg);
        cliente.setEmail(email);
        cliente.setSenha(senha);
        cliente.setTelefone(telefone);
        cliente.setEndereco(endereco);
        cliente.setNascimento(nascimento);
        cliente.setValido(false);
        cliente.setCodigovalidacao(validacao);

        String to = email;
        String subject = "Ativação de Conta - LocExpress";
        String Mensagem = "LocExpress\n Link para ativar sua conta\n http://localhost:8084/LocExpress/ServletCentral?comando=CmdAtivarConta&email="+email+"&codigoValidacao="+validacao+"\n LocExpress - Sua locadora em casa ";

        if (clis.addCliente(cliente)) {
            try {
                SendMail.sendMail(to, subject, Mensagem);
            } catch (AddressException ex) {
                Logger.getLogger(CmdCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
            } catch (MessagingException ex) {
                Logger.getLogger(CmdCadastrarCliente.class.getName()).log(Level.SEVERE, null, ex);
            }
            session.setAttribute("user", cliente);
            session.setAttribute("sucesso", "Cliente Cadastrado com Sucesso - Ative sua conta pelo email!!");
            return "/login.jsp";

        } else {
            session.setAttribute("erro", "Erro ao Cadastrar Cliente!!");
            return "/cadastro.jsp";
        }
    }
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
}
